package com.example.stars_project_android;

import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;

import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMOptions;
import com.hyphenate.easeui.EaseIM;

import java.util.Iterator;
import java.util.List;

public class IMApplication extends Application {
    // 上下文菜单
    private Context mContext;

    // 记录是否已经初始化
    private boolean isInit = false;
        @Override
        public void onCreate() {
            super.onCreate();
            mContext = this;

            // 初始化环信SDK
//            initEasemob();
            EaseIM.getInstance().init(this,null);

        }

    private void initEasemob() {
        // 获取当前进程 id 并取得进程名
        int pid = android.os.Process.myPid();
        String processAppName = getAppName(pid);
        /**
         * 如果app启用了远程的service，此application:onCreate会被调用2次
         * 为了防止环信SDK被初始化2次，加此判断会保证SDK被初始化1次
         * 默认的app会在以包名为默认的process name下运行，如果查到的process name不是app的process name就立即返回
         */
        if (processAppName == null || !processAppName.equalsIgnoreCase(mContext.getPackageName())) {
            // 则此application的onCreate 是被service 调用的，直接返回
            return;
        }
        if (isInit) {
            return;
        }
            EMOptions options = new EMOptions();
            // 设置Appkey，如果配置文件已经配置，这里可以不用设置
            // options.setAppKey("guaju");
            // 设置自动登录
//            options.setAutoLogin(true);
            // 设置是否需要发送已读回执
            options.setRequireAck(true);
            // 收到好友申请是否自动同意，如果是自动同意就不会收到好友请求的回调，因为sdk会自动处理，默认为true
            options.setAcceptInvitationAlways(false);
            // 设置是否自动接收加群邀请，如果设置了当收到群邀请会自动同意加入
            options.setAutoAcceptGroupInvitation(false);
            // 设置（主动或被动）退出群组时，是否删除群聊聊天记录
            options.setDeleteMessagesAsExitGroup(false);
            // 设置是否允许聊天室的Owner 离开并删除聊天室的会话
            options.allowChatroomOwnerLeave(true);
            // 设置google GCM推送id，国内可以不用设置
            // options.setGCMNumber(MLConstants.ML_GCM_NUMBER);
            // 设置集成小米推送的appid和appkey
            // options.setMipushConfig(MLConstants.ML_MI_APP_ID, MLConstants.ML_MI_APP_KEY);

            // 调用初始化方法初始化sdk
            EMClient.getInstance().init(mContext, options);

            // 设置开启debug模式
            EMClient.getInstance().setDebugMode(true);

            // 设置初始化已经完成
            isInit = true;
        }

        /**
         * 根据Pid获取当前进程的名字，一般就是当前app的包名
         *
         * @param pid 进程的id
         * @return 返回进程的名字
         */
        private String getAppName(int pid) {
            String processName = null;
            ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
            List list = activityManager.getRunningAppProcesses();
            Iterator i = list.iterator();
            while (i.hasNext()) {
                ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());
                try {
                    if (info.pid == pid) {
                        // 根据进程的信息获取当前进程的名字
                        processName = info.processName;
                        // 返回当前进程名
                        return processName;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            // 没有匹配的项，返回为null
            return null;
        }
    }


